<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------

namespace Home\Model;
use Think\Model;

/**
 * 分类模型
 */
class CategoryModel extends Model{

	protected $_validate = array(
		array('name', 'require', '标识不能为空', self::EXISTS_VALIDATE, 'regex', self::MODEL_BOTH),
		array('name', '', '标识已经存在', self::VALUE_VALIDATE, 'unique', self::MODEL_BOTH),
		array('title', 'require', '名称不能为空', self::MUST_VALIDATE , 'regex', self::MODEL_BOTH),
	);

	protected $_auto = array(
		array('model', 'arr2str', self::MODEL_BOTH, 'function'),
		array('model', null, self::MODEL_BOTH, 'ignore'),
		array('extend', 'json_encode', self::MODEL_BOTH, 'function'),
		array('extend', null, self::MODEL_BOTH, 'ignore'),
		array('create_time', NOW_TIME, self::MODEL_INSERT),
		array('update_time', NOW_TIME, self::MODEL_BOTH),
		array('status', '1', self::MODEL_BOTH),
	);


	/**
	 * 获取分类详细信息
	 * @param  milit   $id 分类ID或标识
	 * @param  boolean $field 查询字段
	 * @return array     分类信息
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	public function info($id, $field = true){
		/* 获取分类信息 */
		$map = array();
		if(is_numeric($id)){ //通过ID查询
			$map['id'] = $id;
		} else { //通过标识查询
			$map['name'] = $id;
		}
		return $this->field($field)->where($map)->find();
	}

	/**
	 * 获取分类树，指定分类则返回指定分类极其子分类，不指定则返回所有分类树
	 * @param  integer $id    分类ID
	 * @param  boolean $field 查询字段
	 * @return array          分类树
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	public function getTree2($id = 0, $field = true, $auth_categories){
		/* 获取当前分类信息 */

        //print_r($auth_categories);
        //echo implode(',', $auth_categories);
		/* 获取所有分类 */
        $map = array(
            'id'          => array('in', implode(',', $auth_categories)),//过滤当前用户组，左侧菜单的可见项
            'status'      => 1,
        );
        //print_r($map);
		$list = $this->field($field)->where($map)->order('sort')->select();
		$list = list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_', $root = $id);

		/* 获取返回数据 */
		if(isset($info)){ //指定分类则返回当前分类极其子分类
			$info['_'] = $list;
		} else { //否则返回所有分类
			$info = $list;
		}

        //print_r($info);

		return $info;
	}


    /**
     * 获取分类树，指定分类则返回指定分类极其子分类，不指定则返回所有分类树
     * @param  integer $id    分类ID
     * @param  boolean $field 查询字段
     * @return array          分类树
     * @author 麦当苗儿 <zuojiazi@vip.qq.com>
     */
    public function getTreeAll($id = 0, $field = true, $auth_categories){
        /* 获取当前分类信息 */

        //print_r($auth_categories);
        //echo implode(',', $auth_categories);
        /* 获取所有分类 */
        /*
        $map = array(
            'id'          => array('in', implode(',', $auth_categories)),//过滤当前用户组，左侧菜单的可见项
            'status'      => 1,
        );
        //print_r($map);
        $list = $this->field($field)->where($map)->order('sort')->select();
        //$list = list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_', $root = $id);

        if(isset($info)){ //指定分类则返回当前分类极其子分类
            $info['_'] = $list;
        } else { //否则返回所有分类
            $info = $list;
        }

        //print_r($info);
        */

        //print_r(implode(',', $auth_categories));

        $Model = M();
        //进行原生的SQL查询
        $rs = $Model->query("SELECT * FROM `sdg_category` WHERE id IN (".implode(',', $auth_categories).") and status = 1 ORDER BY sort");
        $rs = list_to_tree($rs, $pk = 'id', $pid = 'pid', $child = '_', $root = $id);
        //print_r($rs);

        return $rs;
    }


    /**
     * 获取分类树，指定分类则返回指定分类极其子分类，不指定则返回所有分类树
     * @param  integer $id    分类ID
     * @param  boolean $field 查询字段
     * @return array          分类树
     * @author 麦当苗儿 <zuojiazi@vip.qq.com>
     */
    public function getTree($id = 0, $field = true){
        /* 获取当前分类信息 */
        if($id){
            $info = $this->info($id);
            $id   = $info['id'];
        }

        /* 获取所有分类 */
        $map  = array('status' => 1);
        $list = $this->field($field)->where($map)->order('sort')->select();
        $list = list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_', $root = $id);


        /*
        foreach ($list as $l1) {
            echo $l1["title"];
            echo "<br>";
            if(is_array($l1["_"])) {
                foreach ($l1["_"] as $l2) {
                    echo "-";
                    echo $l2["title"];
                    echo "<br>";
                    if(is_array($l2["_"])) {
                        foreach ($l2["_"] as $l3) {
                            echo "--";
                            echo $l3["title"];
                            echo "<br>";
                            if(is_array($l3["_"])) {
                                foreach ($l3["_"] as $l4) {
                                    echo "---";
                                    echo $l4["title"];
                                    echo "<br>";
                                }
                            }
                        }
                    }
                }
            }
        }
        */


        /* 获取返回数据 */
        if(isset($info)){ //指定分类则返回当前分类极其子分类
            $info['_'] = $list;
        } else { //否则返回所有分类
            $info = $list;
        }

        return $info;
    }

	/**
	 * 获取指定分类的同级分类
	 * @param  integer $id    分类ID
	 * @param  boolean $field 查询字段
	 * @return array
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>         
	 */
	public function getSameLevel($id, $field = true){
		$info = $this->info($id, 'pid');
		$map = array('pid' => $info['pid'], 'status' => 1);
		return $this->field($field)->where($map)->order('sort')->select();
	}

	/**
	 * 更新分类信息
	 * @return boolean 更新状态
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	public function update(){
		$data = $this->create();
		if(!$data){ //数据对象创建错误
			return false;
		}

		/* 添加或更新数据 */
		return empty($data['id']) ? $this->add() : $this->save();
	}

	/**
	 * 获取指定分类子分类ID
	 * @param  string $cate 分类ID
	 * @return string       id列表
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	public function getChildrenId($cate){
		$field = 'id,name,pid,title,link_id';
		$category = D('Category')->getTree($cate, $field);
		$ids = array();
		foreach ($category['_'] as $key => $value) {
			$ids[] = $value['id'];
		}
		return implode(',', $ids);
	}

	/**
	 * 查询后解析扩展信息
	 * @param  array $data 分类数据
	 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
	 */
	protected function _after_find(&$data, $options){
		/* 分割模型 */
        if(!empty($data['model'])){
            $data['model'] = explode(',', $data['model']);
        }

        /* 分割文档类型 */
        if(!empty($data['type'])){
            $data['type'] = explode(',', $data['type']);
        }

        /* 分割模型 */
        if(!empty($data['reply_model'])){
            $data['reply_model'] = explode(',', $data['reply_model']);
        }

        /* 分割文档类型 */
        if(!empty($data['reply_type'])){
            $data['reply_type'] = explode(',', $data['reply_type']);
        }

        /* 还原扩展数据 */
        if(!empty($data['extend'])){
            $data['extend'] = json_decode($data['extend'], true);
        }
	}


    public function get_json() {
//        $jsondata = "{\"page\":\"1\",\"total\":2,\"records\":\"13\",\"rows\":
//    [{\"id\":\"13\",\"cell\":[\"13\",\"2007-10-06\",\"Client 3\",\"1000.00\",\"0.00\",\"1000.00\",null]},
//     {\"id\":\"12\",\"cell\":[\"12\",\"2007-10-06\",\"Client 2\",\"700.00\",\"140.00\",\"840.00\",null]}
//     ],\"userdata\":{\"amount\":3220,\"tax\":342,\"total\":3564,\"name\":\"Totals:\"}}";

        //实例化空模型
        //$Model = new Model();
        //或者使用M快捷方法是等效的
        $Model = M();
        //进行原生的SQL查询
        $jsondata = $Model->query('SELECT * FROM `offline_saomaInfo` WHERE `status` = 1');


        echo $jsondata;

        return $jsondata;
    }

}
